Thiết kế Wine_(phần_mềm)

Mục tiêu của Wine là triển khai các Windows API đầy đủ hoặc một phần được yêu cầu bởi các chương trình mà người dùng Wine muốn chạy trên hệ thống tương tự Unix.

Kiến trúc cơ bản

Các giao diện lập trình của họ hệ điều hành Microsoft Windows bao gồm phần lớn thư viện liên kết động (DLL). Chúng chứa một số lượng lớn các wrapper sub-routines cho các lời gọi hệ thống của kernel, chương trình NTOS kernel-mode (ntoskrnl.exe). Một chương trình Windows thông thường gọi một số Windows DLLs, lần lượt gọi các thư viện gdi/user32 ở chế độ người dùng, lần lượt sử dụng kernel32.dll (hệ thống con win32) chịu trách nhiệm xử lý kernel thông qua các cuộc gọi hệ thống. Lớp lời gọi hệ thống được coi là riêng tư đối với các lập trình viên Microsoft vì tài liệu không có sẵn công khai và tất cả các giao diện được xuất bản đều dựa vào các hệ thống con chạy trên kernel. Bên cạnh đó, có một số giao diện lập trình được triển khai như các dịch vụ chạy dưới dạng các tiến trình riêng biệt. Các ứng dụng giao tiếp với các dịch vụ chế độ người dùng thông qua RPC.[44]

Wine triển khai giao diện nhị phân ứng dụng Windows (ABI) hoàn toàn trong không gian người dùng, thay vì dưới dạng mô-đun hạt nhân. Wine chủ yếu phản ánh hệ thống phân cấp, với các dịch vụ thường được cung cấp bởi kernel trong Windows[45] thay vào đó được cung cấp bởi một daemon được gọi là wineserver, có nhiệm vụ thực hiện chức năng cơ bản của Windows, cũng như tích hợp với X Window System, và dịch tín hiệu thành bản địa Windows ngoại lệ. Mặc dù Wineserver triển khai một số khía cạnh của Windows kernel, nhưng không thể sử dụng trình điều khiển Windows gốc với nó, do kiến trúc cơ bản của Wine.[44] Điều này ngăn các ứng dụng và trò chơi nhất định hoạt động, ví dụ: những ứng dụng sử dụng tính năng chống sao chép StarForce yêu cầu các driver ảo hóa thiết bị để cài đặt.

Các thư viện và ứng dụng

Wine cho phép tải cả Windows DLL và các đối tượng chia sẻ Unix cho các chương trình Windows của nó. Việc triển khai dựng sẵn của nó đối với Windows DLL cơ bản nhất, cụ thể là NTDLL, KERNEL32, GDI32, USER32, sử dụng phương thức đối tượng dùng chung vì họ phải sử dụng các hàm trong hệ điều hành máy chủ là tốt. Các thư viện cấp cao hơn, chẳng hạn như WineD3D, được sử dụng định dạng DLL tự do. Trong nhiều trường hợp, người dùng có thể chọn tải DLL từ Windows thay vì cài đặt bằng wine. Làm như vậy có thể cung cấp các chức năng chưa được thực hiện bởi wine, nhưng cũng có thể gây ra trục trặc nếu nó phụ thuộc vào một thứ khác không có trong wine.[44]

Wine theo dõi trạng thái thực hiện thông qua kiểm thử đơn vị được thực hiện tại mỗi lần commit git.[46]

Đồ họa và gaming

Mặc dù hầu hết các phần mềm văn phòng không sử dụng các API đồ họa tăng tốc GPU phức tạp, các trò chơi máy tính làm vậy. Để chạy các trò chơi này một cách chính xác, Wine sẽ phải chuyển tiếp các hướng dẫn vẽ tới hệ điều hành chủ và thậm chí dịch chúng sang thứ mà hệ điều hành chủ có thể hiểu.

DirectX là một bộ sưu tập các API của Microsoft cho render, âm thanh và đầu vào. Kể từ năm 2019, Wine 4.0 chứa triển khai DirectX 12 cho API Vulkan và DirectX 11.2 cho OpenGL.[47] Wine 4.0 cũng cho phép Wine chạy các ứng dụng Vulkan bằng cách trao các lệnh vẽ cho hệ điều hành chủ hoặc trong trường hợp macOS, bằng cách dịch chúng sang Metal API bằng MoltenVK.[47]

XAudioTính đến tháng 2 năm 2019[cập nhật], Wine 4.3 sử dụng thư viện FAudio (và Wine 4.13 bao gồm một bản sửa lỗi cho nó) để triển khai API âm thanh XAudio2 (và hơn thế nữa).[48][49]XInput và Raw InputWine, từ 4.0 (2019), hỗ trợ bộ điều khiển trò chơi thông qua các triển khai dựng sẵn của các thư viện này. Chúng được xây dựng dưới dạng các đối tượng chia sẻ Unix khi chúng cần truy cập vào các giao diện điều khiển của HĐH cơ bản, đặc biệt thông qua SDL.[47]Direct2DWine 4.0 hỗ trợ Direct2D 1.2.[47]

Direct3D

Phần lớn nỗ lực DirectX của Wine tập trung vào việc xây dựng WineD3D, một lớp dịch từ các lệnh gọi Direct3D và DirectDraw API vào OpenGL. Kể từ năm 2019, thành phần này hỗ trợ tối đa DirectX 11.[47] Kể từ ngày 12 tháng 12 năm 2016, wine đủ tốt để chạy Overwatch với D3D11.[50] Bên cạnh việc được sử dụng trong Wine, WineD3D DLLs cũng hữu ích trong chính Hệ điều hành Windows, cho phép các card đồ họa cũ hơn chạy các trò chơi bằng các phiên bản DirectX mới hơn và cho các trò chơi dựa trên DDraw cũ để hiển thị chính xác.[51]

Một số công việc đang diễn ra để chuyển phụ trợ Direct3D sang API Vulkan. Hỗ trợ Direct3D 12 trong 4.0 được cung cấp bởi tiểu dự án "vkd3d",[47] and WineD3D has in 2019 been experimentally ported to use the Vulkan API.[52]

Wine, khi được vá, có thể chạy Direct3D 9 mà không cần dịch thông qua ứng dụng tự do nguồn mở Gallium3D State Tracker for DX9. Lớp Gallium3D cho phép truyền trực tiếp các lệnh vẽ.[53]

Tài liệu tham khảo

WikiPedia: Wine_(phần_mềm) http://www.tatanka.com.br/ http://www.bordeauxgroup.com/press-release/bordeau... http://media.codeweavers.com/pub/crossover/case_st... http://www.desktoplinux.com/cgi-bin/survey/survey.... http://www.desktoplinux.com/news/NS8454912761.html http://findarticles.com/p/articles/mi_m0CGN/is_199... http://groups.google.com/groups?group=comp.emulato... http://archive09.linux.com/feature/21411 http://archive09.linux.com/feature/42031 http://www.mail-archive.com/ros-diffs@reactos.org/...